﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProjControleBLL;
using ProjControleModelos;

namespace ProjControle
{
    public partial class frm_agendamentos : Form
    {
        String tipo_controle = "";
        public frm_agendamentos()
        {
            InitializeComponent();
        }
        #region Metodos
        public void inserir()
        {
            tipo_controle = "I";
            tbCodCliente.Enabled = true;
            tbBairro.Enabled = true;
            tbCodFunc.Enabled = true;
            tbEndereco.Enabled = true;
            tbHora.Enabled = true;
            tbNome.Enabled = true;
            tbNumCasa.Enabled = true;
            tbTelefone.Enabled = true;
            rtbMotvo.Enabled = true;
            rtbSolucao.Enabled = true;
            cbStatus.Enabled = true;
            gbLocalizar.Enabled = false;
            dtAgendamento.Enabled = true;
            //botoes
            bFuncionarios.Enabled = true;
            bClientes.Enabled = true;
            bIncluir.Enabled = false;
            bAlterar.Enabled = false;
            bSalvar.Enabled = true;
            bCancelar.Enabled = true;
            bExcluir.Enabled = false;
            bVoltar.Enabled = false;
            cbStatus.SelectedIndex = 0;
        }
        public void alterar()
        {
            tipo_controle = "A";
            tbCodCliente.Enabled = true;
            tbBairro.Enabled = true;
            tbCodFunc.Enabled = true;
            tbEndereco.Enabled = true;
            tbHora.Enabled = true;
            tbNome.Enabled = true;
            tbNumCasa.Enabled = true;
            tbTelefone.Enabled = true;
            rtbMotvo.Enabled = true;
            rtbSolucao.Enabled = true;
            cbStatus.Enabled = true;
            gbLocalizar.Enabled = false;
            dtAgendamento.Enabled = true;
            //botoes
            bFuncionarios.Enabled = true;
            bClientes.Enabled = true;
            bIncluir.Enabled = false;
            bAlterar.Enabled = false;
            bSalvar.Enabled = true;
            bCancelar.Enabled = true;
            bExcluir.Enabled = false;
            bVoltar.Enabled = false;
            cbStatus.SelectedIndex = 0;
        }
        public void frm_load()
        {
            tbBairro.Enabled = false;
            tbCodCliente.Enabled = false;
            tbCodFunc.Enabled = false;
            tbCodigo.Enabled = false;
            tbEndereco.Enabled = false;
            tbHora.Enabled = false;
            tbNome.Enabled = false;
            tbNumCasa.Enabled = false;
            tbTelefone.Enabled = false;
            rtbMotvo.Enabled = false;
            rtbSolucao.Enabled = false;
            cbStatus.Enabled = false;
            dtAgendamento.Enabled = false;
            gbLocalizar.Enabled = true;
            cbStatus.SelectedIndex = -1;
            dtInicial.Enabled = true;
            dtFinal.Enabled = true;
            lnome_func.Text = "";
            //boteos
            bFuncionarios.Enabled = false;
            bClientes.Enabled = false;
            bIncluir.Enabled = true;
            bExcluir.Enabled = false;
            bAlterar.Enabled = false;
            bSalvar.Enabled = false;
            bCancelar.Enabled = true;
            bVoltar.Enabled = true;
            associaGrid();
        }
        public void limpar()
        {
            tbBairro.Text = "";
            tbCodCliente.Text = "";
            tbCodFunc.Text = "";
            tbCodigo.Text = "";
            tbEndereco.Text = "";
            tbHora.Text = "";
            tbLocalizar.Text = "";
            tbNome.Text = "";
            tbNumCasa.Text = "";
            tbTelefone.Text = "";
            rtbMotvo.Text = "";
            rtbSolucao.Text = "";
            cbStatus.SelectedIndex = -1;
            dtAgendamento.Value = DateTime.Now;
            bClientes.Enabled = false;
            bFuncionarios.Enabled = false;
            dgAgendamentos.DataSource = null;
            tbBairro.Enabled = false;
            tbCodCliente.Enabled = false;
            tbCodFunc.Enabled = false;
            tbCodigo.Enabled = false;
            tbEndereco.Enabled = false;
            tbHora.Enabled = false;
            tbNome.Enabled = false;
            tbNumCasa.Enabled = false;
            tbTelefone.Enabled = false;
            rtbMotvo.Enabled = false;
            rtbSolucao.Enabled = false;
            cbStatus.Enabled = false;
            dtAgendamento.Enabled = false;
            gbLocalizar.Enabled = true;
            lnome_func.Text = "";
            //boteos
            bFuncionarios.Enabled = false;
            bClientes.Enabled = false;
            bIncluir.Enabled = true;
            bExcluir.Enabled = false;
            bAlterar.Enabled = false;
            bSalvar.Enabled = false;
            bCancelar.Enabled = true;
            bVoltar.Enabled = true;
            associaGrid();
        }
        public Agendamento carregaPropriedades()
        {
            Agendamento objA = new Agendamento();
            try
            {
                
            if (tbCodigo.Text == "")
                objA.cod_agendamento = 0;
            else
                objA.cod_agendamento = int.Parse(tbCodigo.Text);
            objA.cod_cliente = int.Parse(tbCodCliente.Text);
            objA.cod_funcionario = int.Parse(tbCodFunc.Text);
            objA.descricao_agendamento = rtbMotvo.Text;
            objA.dt_agendamento = dtAgendamento.Value;
            objA.hr_agendamento = DateTime.Parse(tbHora.Text);
            objA.status = cbStatus.SelectedItem.ToString();
            objA.solucao_agendamento = rtbSolucao.Text;
            }
            catch (Exception ex)
            {
                
                MessageBox.Show(ex.Message);
            }
            return objA;
        }
        public void carregaCampos(Agendamento objA)
        {
            try
            {
                Cliente objC;
                Funcionarios objF;
                ClienteBLL objCliente = new ClienteBLL();
                tbCodCliente.Text = objA.cod_cliente.ToString();
                objC = objCliente.localizar(objA.cod_cliente);
                tbNome.Text = objC.nome;
                tbEndereco.Text = objC.endereco;
                tbNumCasa.Text = objC.num_casa.ToString();
                tbBairro.Text = objC.bairro;
                tbTelefone.Text = objC.telefone.ToString();
                FuncionarioBLL objFunc = new FuncionarioBLL();
                objF = objFunc.localizar(objA.cod_funcionario);
                lnome_func.Text = objF.nome;
                tbCodFunc.Text = objA.cod_funcionario.ToString();
                tbCodigo.Text = objA.cod_agendamento.ToString();
                rtbMotvo.Text = objA.descricao_agendamento;
                cbStatus.SelectedItem = objA.status.ToString();
                dtAgendamento.Value = objA.dt_agendamento;
                tbHora.Value = objA.hr_agendamento ;
                rtbSolucao.Text = objA.solucao_agendamento;
                objCliente = null;
                objFunc = null;
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void associaGrid()
        {
            DataTable tab;
            try
            {
                tab = new DataTable();
                tab.Columns.Add("cod_agendamento");
                tab.Columns.Add("nome_cliente");
                tab.Columns.Add("hr_agendamento");
                dgAgendamentos.DataSource = tab;
                dgAgendamentos.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgAgendamentos.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgAgendamentos.AllowUserToAddRows = false;
                dgAgendamentos.AllowUserToResizeRows = false;
                dgAgendamentos.AllowUserToResizeColumns = false;
                dgAgendamentos.Columns["cod_agendamento"].HeaderText = "Código";
                dgAgendamentos.Columns["cod_agendamento"].Width = 70;
                dgAgendamentos.Columns["nome_cliente"].HeaderText = "Nome";
                dgAgendamentos.Columns["nome_cliente"].Width = 250;
                dgAgendamentos.Columns["hr_agendamento"].HeaderText = "Hora";
                dgAgendamentos.Columns["hr_agendamento"].Width = 70;
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        #endregion
        private void frm_agendamentos_Load(object sender, EventArgs e)
        {
            frm_load();
        }

        private void bVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void bIncluir_Click(object sender, EventArgs e)
        {
            inserir();
        }

        private void bCancelar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        private void bAlterar_Click(object sender, EventArgs e)
        {
            alterar();
        }

        private void bExcluir_Click(object sender, EventArgs e)
        {
            AgendamentoBLL objBLL = null;
            Agendamento objA = null;
            try
            {
                if (MessageBox.Show("Deseja Excluir?", "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    objBLL = new AgendamentoBLL();
                    objA = carregaPropriedades();
                    objBLL.excluir(objA);
                    MessageBox.Show("Excluido com Sucesso", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    limpar();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            objBLL = null;
            objA = null;
        }

        private void bSalvar_Click(object sender, EventArgs e)
        {
            AgendamentoBLL objBLL = null;
            Agendamento objA = null;
            try
            {
                objA = carregaPropriedades();
                objBLL = new AgendamentoBLL();
                if (tipo_controle == "I")
                    objBLL.inserir(objA);
                else
                    objBLL.alterar(objA);

                MessageBox.Show("Salvo com Sucesso!" + Environment.NewLine + "Código Registrado: " + objA.cod_agendamento + "", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                bCancelar_Click(sender, e);
                if(objA.status == "CONCLUIDO")
                    if (MessageBox.Show("Deseja lançar financeiro?", "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        frm_realiza_venda frm = new frm_realiza_venda();
                        frm.ShowDialog();
                        frm.Close();
                    }
                
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            objBLL = null;
        }

        private void bClientes_Click(object sender, EventArgs e)
        {
            ClienteBLL objBLL = null;
            Cliente objC = null;
            try
            {
                frm_consulta frm = new frm_consulta();
                frm.Text = "Selecionar Cliente";
                frm.controle = "C";
                frm.ShowDialog();
                if (frm.codigo != 0)
                {
                    objBLL = new ClienteBLL();
                    objC = objBLL.localizar(frm.codigo);
                    if (objC.codigo != 0)
                    {
                        tbBairro.Text = objC.bairro;
                        tbCodCliente.Text = objC.codigo.ToString();
                        tbEndereco.Text = objC.endereco;
                        tbNumCasa.Text = objC.num_casa.ToString();
                        tbNome.Text = objC.nome;
                        tbTelefone.Text = objC.telefone.ToString();
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void bFuncionarios_Click(object sender, EventArgs e)
        {
            FuncionarioBLL objBLL = null;
            Funcionarios objF = null;
            try
            {
                frm_consulta frm = new frm_consulta();
                frm.Text = "Selecionar Funcionario";
                frm.controle = "F";
                frm.gbLocalizar.Visible = false;
                frm.ShowDialog();
                if (frm.codigo != 0)
                {
                    objBLL = new FuncionarioBLL();
                    objF = objBLL.localizar(frm.codigo);
                    if (objF.codigo != 0)
                    {
                        lnome_func.Text = objF.nome;
                        tbCodFunc.Text = objF.codigo.ToString();
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbLocalizar_KeyPress(object sender, KeyPressEventArgs e)
        {
            AgendamentoBLL objBLL;
            if (e.KeyChar == Convert.ToChar(Keys.Space))
            {
                try
                {
                    DataTable tab;
                    objBLL = new AgendamentoBLL();
                    tab = objBLL.localizar(tbLocalizar.Text.Trim(), dtInicial.Value, dtFinal.Value);
                    if (tab.Rows.Count > 0)
                    {
                        dgAgendamentos.DataSource = tab;
                        for (int i = 3; i < dgAgendamentos.Columns.Count; i++)
                            dgAgendamentos.Columns[i].Visible = false;
                    }
                    else
                        MessageBox.Show("Registro(s) não Encontrado(s)!", "Clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void dgAgendamentos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int codigo = 0;
            AgendamentoBLL objBLL = null;
            Agendamento objA = null;
            try
            {
                codigo = int.Parse(dgAgendamentos.Rows[e.RowIndex].Cells[0].Value.ToString());
                if (codigo != 0)
                {
                    bAlterar.Enabled = true;
                    bExcluir.Enabled = true;
                    bIncluir.Enabled = false;
                    bCancelar.Enabled = true;
                    objBLL = new AgendamentoBLL();
                    objA = objBLL.localizar(codigo);
                    if (objA.cod_agendamento != 0)
                    {
                        carregaCampos(objA);
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void frm_agendamentos_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Escape))
                this.Close();
        }
    }
}
